home *** CD-ROM | disk | FTP | other *** search
/ OpenGL Superbible (2nd Edition) / OpenGL SuperBible e2.iso / tools / GLUT-3.7 / PROGS / EXAMPLES / STROKE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-12  |  2.1 KB  |  101 lines

  1.  
  2. /* Copyright (c) Mark J. Kilgard, 1994. */
  3.  
  4. /* This program is freely distributable without licensing fees 
  5.    and is provided without guarantee or warrantee expressed or 
  6.    implied. This program is -not- in the public domain. */
  7.  
  8. #include <string.h>
  9. #include <GL/glut.h>
  10.  
  11. void *font = GLUT_STROKE_ROMAN;
  12. void *fonts[] =
  13. {GLUT_STROKE_ROMAN, GLUT_STROKE_MONO_ROMAN};
  14. char defaultMessage[] = "GLUT means OpenGL.";
  15. char *message = defaultMessage;
  16.  
  17. int angle = 0;
  18.  
  19. void
  20. selectFont(int newfont)
  21. {
  22.   font = fonts[newfont];
  23.   glutPostRedisplay();
  24. }
  25.  
  26. void
  27. selectMessage(int msg)
  28. {
  29.   switch (msg) {
  30.   case 1:
  31.     message = "abcdefghijklmnop";
  32.     break;
  33.   case 2:
  34.     message = "ABCDEFGHIJKLMNOP";
  35.     break;
  36.   }
  37. }
  38.  
  39. void
  40. tick(void)
  41. {
  42.   angle -= 2;
  43.   glutPostRedisplay();
  44. }
  45.  
  46. void
  47. display(void)
  48. {
  49.   int len, i;
  50.  
  51.   glClear(GL_COLOR_BUFFER_BIT);
  52.   glPushMatrix();
  53.   glRotatef(angle, 0.0, 0.0, 1.0);
  54.   glTranslatef(-750, 0, 0);
  55.   len = (int) strlen(message);
  56.   for (i = 0; i < len; i++) {
  57.     glutStrokeCharacter(font, message[i]);
  58.   }
  59.   glPopMatrix();
  60.   glutSwapBuffers();
  61. }
  62.  
  63. int
  64. main(int argc, char **argv)
  65. {
  66.   int i, submenu;
  67.  
  68.   glutInit(&argc, argv);
  69.   for (i = 1; i < argc; i++) {
  70.     if (!strcmp(argv[i], "-mono")) {
  71.       font = GLUT_STROKE_MONO_ROMAN;
  72.     }
  73.   }
  74.   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  75.   glutInitWindowSize(600, 600);
  76.   glutCreateWindow("anti-aliased stroke font");
  77.   glMatrixMode(GL_PROJECTION);
  78.   glLoadIdentity();
  79.   gluOrtho2D(0, 2000, 0, 2000);
  80.   glMatrixMode(GL_MODELVIEW);
  81.   glEnable(GL_LINE_SMOOTH);
  82.   glEnable(GL_BLEND);
  83.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  84.   glLineWidth(3.0);
  85.   glTranslatef(1000, 1000, 0);
  86.   glClearColor(0.0, 0.0, 0.0, 1.0);
  87.   glColor3f(1.0, 1.0, 1.0);
  88.   glutDisplayFunc(display);
  89.   glutIdleFunc(tick);
  90.   submenu = glutCreateMenu(selectMessage);
  91.   glutAddMenuEntry("abc", 1);
  92.   glutAddMenuEntry("ABC", 2);
  93.   glutCreateMenu(selectFont);
  94.   glutAddMenuEntry("Roman", 0);
  95.   glutAddMenuEntry("Mono Roman", 1);
  96.   glutAddSubMenu("Messages", submenu);
  97.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  98.   glutMainLoop();
  99.   return 0;             /* ANSI C requires main to return int. */
  100. }
  101.